package com.aos.erp.schools.service.sys;


import com.aos.erp.common.bean.IPageBean;
import com.aos.erp.common.exception.BizException;
import com.aos.erp.schools.model.sys.User;
import com.aos.erp.schools.model.sys.dto.UserDto;
import com.aos.erp.schools.model.sys.vo.UserVo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.Map;

public interface UserService {
    /**
     * 新增后台用户
     *
     * @param userVo
     * @param appCode 应用code
     * @return
     * @throws Exception
     */
    Map<String, Object> addBean(UserVo userVo, String appCode) throws Exception;

    /**
     * 根据用户名字查询
     *
     * @param name
     * @return
     */
    User findByName(String name);

    /**
     * 分页查询
     *
     * @param pageIndex 当前页码
     * @param pageSize  每页显示条数
     * @param name      部门组织code
     * @param name      用户姓名
     * @param username  用户账号
     * @param depName   部门名称
     * @return
     */
    IPage<UserDto> queryByPage(Integer pageIndex, Integer pageSize, String depCode, String name, String username, String depName);

    /**
     * 删除用户
     *
     * @param id
     * @param appCode 应用code
     * @return
     */
    int isDel(String id, String appCode) throws Exception;

    /**
     * 修改用户
     *
     * @param userVo
     * @return
     * @throws Exception
     */
    int updateObject(UserVo userVo) throws Exception;

    /**
     * @param request
     * @param response
     * @param username    账号
     * @param password    密码
     * @param code        验证码
     * @param captchaCode Cookie key
     * @param appCode     应用code
     * @throws BizException
     */
    Map<String, Object> login(HttpServletRequest request, HttpServletResponse response, String username, String password, String code,
                              String captchaCode, String appCode) throws BizException;

    /**
     * 退出登录
     *
     * @param token 登录用户token
     */
    void logout(String token) throws BizException;

    /**
     * 根据用户id查询
     *
     * @param id
     * @return
     */
    UserDto findById(Long id);

    void update(User userInfo);

    /**
     * 修改密码
     *
     * @param username      用户账号
     * @param password      用户旧密码
     * @param oldpassword   用户新密码
     * @param currentUserId 当前登录用户
     * @param appCode       应用code
     * @return
     */
    int changePassword(String username, String password, String oldpassword, String currentUserId, String appCode) throws Exception;


    User createNewUser(String name, String mobile, String profilePhoto);

    IPageBean<User> findByPage(IPageBean<User> page);

    IPageBean<User> findByPage(long page, long size, QueryWrapper<User> qw);

    IPageBean<User> findByPage(long page, long size, String name, String phone);

    IPageBean<User> findByPage(long page, long size, String name, String phone, Date startTime, Date endTime);

    void updateInfo(long id, String name, String profilePhoto);

    User updatePhone(long id, String phone);
}
